.\" 1999 PTM Przemek Borys
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" Copyright (c) 1994-1996 Sun Microsystems, Inc.
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\" 
'\" SCCS: @(#) Tcl.n 1.128 96/08/26 12:59:50
'
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  If an argument is present, then a line break is
'\"	forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" SCCS: @(#) man.macros 1.8 96/02/15 20:02:24
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ie !"\\$3"" \{\
.ta \\n()Au \\n()Bu
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$1"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "OPCJE STANDARDOWE"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
Zobacz podręcznik \fBoptions\fR(n) dla dalszych szczegółów o standardowych
opcjach.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Nazwa linii komend:	\\fB\\$1\\fR
Nazwa bazy danych:	\\fB\\$2\\fR
Klasa bazy danych:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH Tcl 3tcl "" Tcl "Wbudowane komendy Tcl"
.BS
.SH NAZWA
Tcl \- Podsumowanie składni języka Tcl
.BE

.SH OPIS
.PP
Następujące reguły definiują semantykę języka Tcl:
.IP [1]
Skrypt Tcl jest łańcuchem, zawierającym jedną, lub więcej komend.
Średniki i nowe linie są separatorami komend, chyba że są zacytowane.
Zamykające nawiasy są normalnie terminatorami komend.
.IP [2]
Komenda jest analizowana w dwóch krokach.
Najpierw interpreter Tcl rozbija komendę na \fIsłowa\fR i dokonuje opisanych
niżej podstawień. Podstawienia te są dokonywane jednakowo dla wszystkich
komend.
Pierwsze słowo jest używane do lokalizowania procedury komendy, która wykona
polecenie, a następnie wszystkie pozostałe słowa komendy są przekazywane do
tej procedury.
Procedura może interpretować każde ze swoich słów w dowolny sposób, np. jako
liczbę całkowitą, nazwę zmiennej, listę, lub skrypt Tcl.
Różne komendy różnie interpretują swoje słowa.
.IP [3]
Słowa komendy są rozdzielane białymi spacjami (poza nowymi liniami, które są
separatorami komend).
.IP [4]
Pierwszy znak słowa to podwójny cudzysłów (``"''), ostatni również.
Jeśli między cudzysłowami pojawią się średniki, nawiasy czy białe spacje, to
będą one traktowane jak zwykłe znaki włączone w słowo.
Podstawianie komend i zmiennych, oraz podstawianie ukośnikowe jest
dokonywane na znakach międzycudzysłowowych w sposób opisany niżej.
Podwójne cudzysłowy nie są zachowywane jako elementy słowa.
.IP [5]
Jeśli pierwszy znak słowa jest otwartym nawiasem klamrowym (``{''), to słowo
jest kończone klamrą zamykającą, (``}'').
Klamry zagnieżdżają się w słowie: każda otwarta klamra musi mieć klamrę
zamykającą (jednak jeśli klamra jest cytowana lewym ukośnikiem, to jej 
działanie nie wymaga klamry zamykającej).
Na znakach między klamrami nie dokonuje się żadnych podstawień, nie licząc
podstawień lewy ukośnik-nowa linia. Słowo składa się dokładnie ze znaków 
między klamrami, nie licząc samych klamr.
.IP [6]
Jeśli słowo zawiera otwarty nawias kwadratowy (``[''), to Tcl dokonuje
\fIpodstawienia komendy\fR.
Aby tego dokonać, woła rekursywnie interpreter Tcl, który przetwarza znaki
znajdujące za nawiasem jako skrypt Tcl. Skrypt może zawierać dowolną liczbę
komend i musi być zakończony nawiasem zamykającym (``]'').
Wyniki skryptu (np. wynik ostatniej komendy) są podstawiane zamiast
nawiasów, wraz ze znakami znajdującymi się między nimi.
Może być dowolnie wiele podstawień w pojedynczym słowie. Podstawianie komend
nie jest dokonywane na słowach ujętych w nawiasy klamrowe.
.IP [7]
Jeśli słowo zawiera znak dolara (``$'') to Tcl dokonuje \fIpodstawienia
zmiennej\fR: znak dolara i następujące znaki są zastępowane wartością
zmiennej. Podstawienie zmiennej może przybrać jedną z postaci:
.RS
.TP 15
\fB$\fInazwa\fR
 \fINazwa\fR jest nazwą zmiennej skalarnej; nazwa jest kończona dowolnym
znakiem, który nie jest literą, cyfrą, lub podkreśleniem.
.TP 15
\fB$\fInazwa\fB(\fIindeks\fB)\fR
\fINazwa\fR daje nazwę zmiennej tablicowej, a \fIindeks\fR daje nazwę jej
elementu. \fINazwa\fR musi składać się tylko z liter, cyfr i podkreśleń.
Na znakach \fIindeksu\fR dokonywane są podstawienia komend, zmiennych i
lewych ukośników.
.TP 15
\fB${\fInazwa\fB}\fR
\fINazwa\fR jest nazwą zmiennej skalarnej. Może zawierać dowolne znaki poza
zamykającymi nawiasami klamrowymi.
.LP
W pojedynczym słowie może być wiele podstawień zmiennych. Na słowach, ujętych
w klamry nie jest dokonywane podstawienie zmiennych.
.RE
.IP [8]
Jeśli w słowie znajduje się lewy ukośnik (``\e''), to następuje
\fIpodstawienie ukośnikowe\fR.
We wszystkich wypadkach, poza opisanymi niżej, ukośnik jest porzucany, a
następujący znak jest traktowany jak zwykły i jest włączany w słowo.
Umożliwia to włączanie znaków takich, jak podwójne cytaty, nawiasy
zamykające i znaki dolara.
Następująca tabela pokazuje sekwencje ukośnikowe, które są traktowane
szczególnie, wraz z wartościami, które wchodzą w ich miejsce.
.RS
.TP 6
\e\fBa\fR
Dzwonek (0x7).
.TP 6
\e\fBb\fR
Backspace (0x8).
.TP 6
\e\fBf\fR
Form feed (0xc).
.TP 6
\e\fBn\fR
Nowa linia (0xa).
.TP 6
\e\fBr\fR
Powrót karetki (0xd).
.TP 6
\e\fBt\fR
Tabulacja (0x9).
.TP 6
\e\fBv\fR
Tabulacja pionowa (0xb).
.TP 6
\e\fB<nowalinia>\fIbiałaspacja\fR
Zamiast ukośnika, nowej linii i białej (białych) spacji, podstawiany jest 
pojedynczy znak spacji.
Sekwencja ukośnikowa jest unikalna dlatego, że jest podstawiana w oddzielnym
przedbiegu przed przetworzeniem komendy.
Znaczy to, że będzie podstawiona nawet gdy nastąpi między nawiasami, a
wynikająca spacja będzie traktowana jako separator słów (o ile nie jest w
cudzysłowach lub klamrach).
.TP 6
\e\e
Lewy ukośnik (``\e'').
.TP 6
\e\fIooo\fR
Cyfry \fIooo\fR (jedna, dwie, lub trzy z nich) dają rzeczywistą ósemkową
wartość znaku.
.TP 6
\e\fBx\fIhh\fR
Cyfry szesnastkowe \fIhh\fR dają szesnastkową wartość znaku. Obecna może być
dowolna liczba cyfr.
.LP
Podstawianie ukośnikowe nie jest dokonywane na słowach ujętych w klamry, nie
licząc podstawienia ukośnik-nowa linia, opisanego wyżej.
.RE
.IP [9]
Jeśli w miejscu, gdzie Tcl oczekuje pierwszego znaku pierwszego słowa
komendy znajduje się znak ``#'', to znak ten i znaki za nim następujące, aż
do nowej linii, są traktowane jako komentarz i są ignorowane.
Znak komentarza ma znaczenie gdy znajduje się na początku komendy.
.IP [10]
Każdy znak jest przetwarzany przez interpreter Tcl tylko raz jako element
tworzenia słów komendy.
Na przykład, jeśli nastąpi podstawienie zmiennych, dalsze podstawienia na
wartości zmiennej nie następują; wartość jest wstawiana dosłownie.
Jeśli nastąpi podstawianie komend, to zagnieżdżone komendy są przetwarzane
całościowo przez rekursywne wywołania interpretera Tcl; przed tym wywołaniem
nie są robione żadne podstawienia. Podobnie po wywołaniu nie robi się
żadnych dodatkowych podstawień.
.IP [11]
Podstawienia nie tyczą się ograniczników słów komendy. Na przykład podczas
podstawiania zmiennych cała wartość zmiennej staje się częścią pojedynczego
słowa, nawet jeśli wartość zmiennej zawiera spacje.
